/**
 * Copyright (c) 2020-2022 宁波哥爱帮科技有限公司
 */
package cn.grab.fispservice.system.service.impl;

import cn.grab.fispservice.system.model.SysDictItem;
import cn.grab.fispservice.system.mapper.SysDictItemMapper;
import cn.grab.fispservice.system.service.SysDictItemService;
import com.fontana.base.object.DictModel;
import com.fontana.db.mapper.BaseDaoMapper;
import com.fontana.db.service.impl.AbstractBaseService;
import com.fontana.redis.util.DictCacheHelper;
import com.fontana.redis.util.RedisTemplateUtil;
import com.fontana.util.tools.ConstantDictUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 *  服务实现类
 *
 * @author Auto
 * @since 2022-10-31
 */
@Service("sysDictItemService")
public class SysDictItemServiceImpl extends AbstractBaseService<SysDictItem, Long> implements SysDictItemService {

    @Autowired
    private SysDictItemMapper sysDictItemMapper;

    @Autowired
    private RedisTemplateUtil redisTemplateUtil;

    @Autowired
    private DictCacheHelper dictCacheHelper;

    /**
     * 返回当前Service的主表Mapper对象。
     *
     * @return 主表Mapper对象。
     */
    @Override
    protected BaseDaoMapper<SysDictItem> mapper() {
        return sysDictItemMapper;
    }

    /**
     * 保存新增的SysDictItem对象。
     *
     * @param sysDictItem  新增SysDictItem对象。
     * @return 新增后的SysDictItem对象。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public SysDictItem saveNew(SysDictItem sysDictItem){
        return sysDictItem;
    }

    /**
     * 更新SysDictItem对象。
     *
     * @param sysDictItem  更新的SysDictItem对象。
     * @return 更新成功返回true，否则false。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean update(SysDictItem sysDictItem){
        return false;
    }

    /**
     * 删除指定数据。
     *
     * @param id 主键Id。
     * @return 成功返回true，否则false。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean remove(Long id){
        if (sysDictItemMapper.deleteById(id) == 0) {
            return false;
        }
        return true;
    }

    /**
     * 获取单表查询结果
     *
     * @param filter  过滤对象。
     * @param orderBy 排序参数。
     * @return 查询结果集。
     */
    @Override
    public List<SysDictItem> getSysDictItemList(SysDictItem filter, String orderBy){
        return sysDictItemMapper.getSysDictItemList(null, null, filter, orderBy);
    }

    @Override
    public Map<String, List<DictModel>> getAllDictItems(){

        //系统字典
        Map<String, List<DictModel>> dictMap = sysDictItemMapper.getAllDictItems().stream().map(t->new DictModel(t.getDictCode(), t.getItemValue(), t.getItemText())).collect(Collectors.groupingBy(DictModel::getCode));

        //常量字典
        dictMap.putAll(ConstantDictUtil.getConstDictData());

        //更新缓存
        dictCacheHelper.refreshAllDict(dictMap);
        return dictMap;
    }

}

